package com.xuxu.topic;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xuxu.util.RabbitConnectionUtil;

/**
 * 通配符模式，在路由模式上增加了增加了通配符
 * 一般路由key(routingKey)
 * 通配符 #：匹配一个或多个词
 * *：匹配不多不少一个恰好一个词
 * <p>
 * 通配符模式是：TOPIC
 * <p>
 * 生产者不用声明队列
 */
public class Producer {
    //定义交换机名称
    static final String TOPIC_EXCHANGE = "topic_exchange";

    public static void main(String[] args) throws Exception {
        //获取连接对象
        Connection connection = RabbitConnectionUtil.getConnection();
        //获取频道
        Channel channel = connection.createChannel();

        //声明交换机
        /*
            交换机名称
            声明是通配符模式
         */
        channel.exchangeDeclare(TOPIC_EXCHANGE, BuiltinExchangeType.TOPIC);

        //准备信息发送信息
        String message = "新增商品，通配符模式,路由key是topic.insert";
        //发送信息
        /*
            交换机名称，路由key，其他队列参数，消息内容体
         */
        channel.basicPublish(TOPIC_EXCHANGE, "topic.insert", null, message.getBytes());
        System.out.println("发送的消息是：   " + message);

        System.out.println("==============================================");

        //准备信息发送信息
        message = "更新商品，通配符模式,路由key是topic.update";
        //发送信息
        /*
            交换机名称，路由key，其他队列参数，消息内容体
         */
        channel.basicPublish(TOPIC_EXCHANGE, "topic.update", null, message.getBytes());
        System.out.println("发送的消息是：   " + message);

        System.out.println("==============================================");

        //准备信息发送信息
        message = "删除商品，通配符模式,路由key是topic.delete";
        //发送信息
        /*
            交换机名称，路由key，其他队列参数，消息内容体
         */
        channel.basicPublish(TOPIC_EXCHANGE, "topic.delete", null, message.getBytes());
        System.out.println("发送的消息是：   " + message);
    }

}
